﻿using F1010DB.CustomEntity.ScoutMemberCustom;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using F1010DB.Common;
using System.Windows.Forms;
using System.Data;
namespace F1010DB.ScoutMember
{
    public class ScoutMemberServices : AbstractScoutMember
    {
        // Những biến đặc trưng của lớp services
        public F1010DB.CustomEntity.ScoutMemberCustom.ScoutMemberInput input;
        //------ Vùng các quy định về nhập liệu -----------------
        private const int MAX_LENGTH_FOR_HO_LOT = 15;
        private const int MAX_LENGTH_FOR_TEN_DEM = 20;
        private const int MAX_LENGTH_FOR_TEN = 10;
        private const int MAX_LENGTH_FOR_SO_NHA = 20;
        private const int MAX_LENGTH_FOR_DUONG = 50;
        private const int MAX_LENGTH_FOR_PHUONG = 50;
        private const int MAX_LENGTH_FOR_QUAN = 50;
        private const int MAX_LENGTH_FOR_SO_DIEN_THOAI_NHA = 11;
        private const int MAX_LENGTH_FOR_SO_DIEN_THOAI_DD = 11;
        private const int MAX_LENGTH_FOR_EMAIL = 100;
        private const int MAX_LENGTH_FOR_FACEBOOK = 100;
        private const int MAX_LENGTH_FOR_YAHOO = 100;
        private const int MAX_LENGTH_FOR_TWITTER = 100;
        private const int MAX_LENGTH_FOR_SOCMND = 12;
        private const int MAX_LENGTH_FOR_NOI_LAM_VIEC = 100;
        private const int MAX_LENGTH_FOR_LOP = 50;
        private const int MAX_LENGTH_FOR_NGAY_THAM_GIA_PT = 50;
        private const int MAX_LENGTH_FOR_NGAY_TUYEN_HUA = 50;
        private const int MAX_LENGTH_FOR_DON_VI_TUYEN_HUA = 8;
        private const int MAX_LENGTH_FOR_TRUONG_NHAN_TH = 50;
        private const int MAX_LENGTH_FOR_HO_VA_TEN_BA = 50;
        private const int MAX_LENGTH_FOR_SO_DT_BA = 12;
        private const int MAX_LENGTH_FOR_HO_VA_TEN_ME = 50;
        private const int MAX_LENGTH_FOR_SO_DT_ME = 12;
        private const int MAX_LENGTH_FOR_HO_VA_TEN_GIAM_HO = 50;
        private const int MAX_LENGTH_FOR_SO_DT_GIAM_HO = 12;
        private const int MAX_LENGTH_FOR_QUAN_HE_GIAM_HO = 50;

        // Chọn column
        public string[] arrCol = null;
        protected override CustomEntity.ScoutMemberCustom.ScoutMemberInput setScoutMemberInput()
        {
            return input;
        }

        protected override List<string> inputErrorValidation(ScoutMemberInput inputForm)
        {
            List<string> messeges = new List<string>();
            string m = "";
            // Validate ho ten
            m = ValidationHelper.ValidationForString.checkRequire(inputForm.MaDoanSinh);

            if (!m.Equals(Constant.ConstantForMsgId.CONST_NONE))
            {
                messeges.Add(MessagesEx.MsgById(m, "Mã đoàn sinh"));
            }
            // Validate ho lot
            m = ValidationHelper.ValidationForString.checkRequire(inputForm.HoLot);

            if (!m.Equals(Constant.ConstantForMsgId.CONST_NONE))
            {
                messeges.Add(MessagesEx.MsgById(m, "Họ lót"));
            }

            m = ValidationHelper.ValidationForString.checkMaxLength(inputForm.HoLot, MAX_LENGTH_FOR_HO_LOT);

            if (!m.Equals(Constant.ConstantForMsgId.CONST_NONE))
            {
                messeges.Add(MessagesEx.MsgById(m, "Họ lót", MAX_LENGTH_FOR_HO_LOT.ToString()));
            }

            m = ValidationHelper.ValidationForString.checkAlphanumeric(inputForm.HoLot);

            if (!m.Equals(Constant.ConstantForMsgId.CONST_NONE))
            {
                messeges.Add(MessagesEx.MsgById(m, "Họ lót"));
            }

            // Validate ten
            m = ValidationHelper.ValidationForString.checkRequire(inputForm.Ten);

            if (!m.Equals(Constant.ConstantForMsgId.CONST_NONE))
            {
                messeges.Add(MessagesEx.MsgById(m, "Tên"));
            }

            m = ValidationHelper.ValidationForString.checkMaxLength(inputForm.Ten, MAX_LENGTH_FOR_TEN);

            if (!m.Equals(Constant.ConstantForMsgId.CONST_NONE))
            {
                messeges.Add(MessagesEx.MsgById(m, "Tên", MAX_LENGTH_FOR_TEN.ToString()));
            }

            m = ValidationHelper.ValidationForString.checkAlphanumeric(inputForm.Ten);

            if (!m.Equals(Constant.ConstantForMsgId.CONST_NONE))
            {
                messeges.Add(MessagesEx.MsgById(m, "Tên"));
            }

            // Validate ten dem
            m = ValidationHelper.ValidationForString.checkRequire(inputForm.TenDem);

            if (!m.Equals(Constant.ConstantForMsgId.CONST_NONE))
            {
                messeges.Add(MessagesEx.MsgById(m, "Tên Đệm"));
            }

            m = ValidationHelper.ValidationForString.checkMaxLength(inputForm.TenDem, MAX_LENGTH_FOR_TEN_DEM);

            if (!m.Equals(Constant.ConstantForMsgId.CONST_NONE))
            {
                messeges.Add(MessagesEx.MsgById(m, "Tên Đệm", MAX_LENGTH_FOR_TEN_DEM.ToString()));
            }

            m = ValidationHelper.ValidationForString.checkAlphanumeric(inputForm.TenDem);

            if (!m.Equals(Constant.ConstantForMsgId.CONST_NONE))
            {
                messeges.Add(MessagesEx.MsgById(m, "Tên Đệm"));
            }

            // Validate Ngay Sinh
            m = ValidationHelper.ValidateForDate.checkDate(inputForm.namSinh, inputForm.thangSinh, inputForm.ngaySinh);

            if (!m.Equals(Constant.ConstantForMsgId.CONST_NONE))
            {
                messeges.Add(MessagesEx.MsgById(m, "Ngày sinh"));
            }

            m = ValidationHelper.ValidationForString.checkRequire(input.namSinh);

            if (!m.Equals(Constant.ConstantForMsgId.CONST_NONE))
            {
                messeges.Add(MessagesEx.MsgById(m, "Năm sinh"));
            }

            m = ValidationHelper.ValidationForString.checkRequire(input.ngaySinh);

            if (!m.Equals(Constant.ConstantForMsgId.CONST_NONE))
            {
                messeges.Add(MessagesEx.MsgById(m, "Ngày Sinh"));
            }

            m = ValidationHelper.ValidationForString.checkRequire(input.thangSinh);

            if (!m.Equals(Constant.ConstantForMsgId.CONST_NONE))
            {
                messeges.Add(MessagesEx.MsgById(m, "Tháng Sinh"));
            }

            // Validate dan toc
            // Validate ton giao
            // Validate dia chi
            m = ValidationHelper.ValidationForString.checkRequire(input.SoNha);
            if (!m.Equals(Constant.ConstantForMsgId.CONST_NONE))
            {
                messeges.Add(MessagesEx.MsgById(m, "Số Nhà"));
            }

            m = ValidationHelper.ValidationForString.checkRequire(input.Duong);
            if (!m.Equals(Constant.ConstantForMsgId.CONST_NONE))
            {
                messeges.Add(MessagesEx.MsgById(m, "Đường"));
            }

            m = ValidationHelper.ValidationForString.checkRequire(input.Phuong);
            if (!m.Equals(Constant.ConstantForMsgId.CONST_NONE))
            {
                messeges.Add(MessagesEx.MsgById(m, "Phường"));
            }

            m = ValidationHelper.ValidationForString.checkRequire(input.Quan);
            if (!m.Equals(Constant.ConstantForMsgId.CONST_NONE))
            {
                messeges.Add(MessagesEx.MsgById(m, "Quận"));
            }

            // Validate So Dien Thoai
            m = ValidationHelper.ValidationForString.checkRequire(input.SoDienThoaiNha);
            if (!m.Equals(Constant.ConstantForMsgId.CONST_NONE))
            {
                messeges.Add(MessagesEx.MsgById(m, "Số điện thoại nhà"));
            }

            m = ValidationHelper.ValidationForString.checkPhone(input.SoDienThoaiNha);
            if (!m.Equals(Constant.ConstantForMsgId.CONST_NONE))
            {
                messeges.Add(MessagesEx.MsgById(m, "Số điện thoại nhà"));
            }

            if (!String.IsNullOrEmpty(input.SoDienThoaiDd))
            {
                m = ValidationHelper.ValidationForString.checkPhone(input.SoDienThoaiDd);
                if (!m.Equals(Constant.ConstantForMsgId.CONST_NONE))
                {
                    messeges.Add(MessagesEx.MsgById(m, "Số điện thoại di động"));
                }
            }

            if (!String.IsNullOrEmpty(input.Email))
            {
                m = ValidationHelper.ValidationForString.checkEmail(input.Email);
                if (!m.Equals(Constant.ConstantForMsgId.CONST_NONE))
                {
                    messeges.Add(MessagesEx.MsgById(m, "Email"));
                }
            }

            if (!String.IsNullOrEmpty(input.Socmnd))
            {
                m = ValidationHelper.ValidationForString.checkSoCMND(input.Socmnd);

                if (!m.Equals(Constant.ConstantForMsgId.CONST_NONE))
                {
                    messeges.Add(MessagesEx.MsgById(m, "Số chứng minh nhân dân"));
                }

                m = ValidationHelper.ValidationForString.checkRequire(input.Ngaycap);

                if (!m.Equals(Constant.ConstantForMsgId.CONST_NONE))
                {
                    messeges.Add(MessagesEx.MsgById(m, "Ngày cấp"));
                }

                m = ValidationHelper.ValidationForString.checkRequire(input.Noicap.ToString());

                if (!m.Equals(Constant.ConstantForMsgId.CONST_NONE))
                {
                    messeges.Add(MessagesEx.MsgById(m, "Nơi cấp"));
                }
            }

            m = ValidationHelper.ValidationForString.checkRequire(input.NgheNghiep.ToString());

            if (!m.Equals(Constant.ConstantForMsgId.CONST_NONE))
            {
                messeges.Add(MessagesEx.MsgById(m, "Nghề nghiệp"));
            }

            m = ValidationHelper.ValidationForString.checkRequire(input.NoiLamViec);

            if (!m.Equals(Constant.ConstantForMsgId.CONST_NONE))
            {
                messeges.Add(MessagesEx.MsgById(m, "Nơi làm việc"));
            }

            if (input.isTuyenHua)
            {
                if (!input.isSameUnit)
                {
                    m = ValidationHelper.ValidationForString.checkRequire(input.DonViTuyenHua);
                    if (!m.Equals(Constant.ConstantForMsgId.CONST_NONE))
                    {
                        messeges.Add(MessagesEx.MsgById(m, "Đơn vị tuyên hứa"));
                    }
                }
                m = ValidationHelper.ValidationForString.checkRequire(input.TruongNhanTh);
                if (!m.Equals(Constant.ConstantForMsgId.CONST_NONE))
                {
                    messeges.Add(MessagesEx.MsgById(m, "Trưởng nhận tuyên hứa"));
                }

                m = ValidationHelper.ValidationForString.checkMaxLength(input.TruongNhanTh, MAX_LENGTH_FOR_TRUONG_NHAN_TH);
                if (!m.Equals(Constant.ConstantForMsgId.CONST_NONE))
                {
                    messeges.Add(MessagesEx.MsgById(m, "Trưởng nhận tuyên hứa", MAX_LENGTH_FOR_TRUONG_NHAN_TH.ToString()));
                }
            }

            if (!String.IsNullOrEmpty(input.HoVaTenBa))
            {
                m = ValidationHelper.ValidationForString.checkMaxLength(input.HoVaTenBa, MAX_LENGTH_FOR_HO_VA_TEN_BA);

                if (ValidationHelper.hasError(m))
                {
                    messeges.Add(MessagesEx.MsgById(m, "Họ và tên Ba", MAX_LENGTH_FOR_HO_VA_TEN_BA.ToString()));
                }
                if (!String.IsNullOrEmpty(input.SoDtBa))
                {
                    m = ValidationHelper.ValidationForString.checkPhone(input.SoDtBa);
                    if (ValidationHelper.hasError(m))
                    {
                        messeges.Add(MessagesEx.MsgById(m, "Số điện thoại ba"));
                    }
                }
                if (!String.IsNullOrEmpty(input.emailBa))
                {
                    m = ValidationHelper.ValidationForString.checkEmail(input.emailBa);
                    if (ValidationHelper.hasError(m))
                    {
                        messeges.Add(MessagesEx.MsgById(m, "Email ba"));
                    }
                }
            }

            // Validate mẹ
            if (!String.IsNullOrEmpty(input.HoVaTenMe))
            {
                m = ValidationHelper.ValidationForString.checkMaxLength(input.HoVaTenMe, MAX_LENGTH_FOR_HO_VA_TEN_ME);

                if (ValidationHelper.hasError(m))
                {
                    messeges.Add(MessagesEx.MsgById(m, "Họ và tên Mẹ", MAX_LENGTH_FOR_HO_VA_TEN_ME.ToString()));
                }
                if (!String.IsNullOrEmpty(input.SoDtMe))
                {
                    m = ValidationHelper.ValidationForString.checkPhone(input.SoDtMe);
                    if (ValidationHelper.hasError(m))
                    {
                        messeges.Add(MessagesEx.MsgById(m, "Số điện thoại mẹ"));
                    }
                }
                if (!String.IsNullOrEmpty(input.emailMe))
                {
                    m = ValidationHelper.ValidationForString.checkEmail(input.emailMe);
                    if (ValidationHelper.hasError(m))
                    {
                        messeges.Add(MessagesEx.MsgById(m, "Email mẹ"));
                    }
                }
            }

            // Validate trường hợp người giám hộ
            if (!String.IsNullOrEmpty(input.HoVaTenGiamHo))
            {
                m = ValidationHelper.ValidationForString.checkMaxLength(input.HoVaTenGiamHo, MAX_LENGTH_FOR_HO_VA_TEN_GIAM_HO);

                if (ValidationHelper.hasError(m))
                {
                    messeges.Add(MessagesEx.MsgById(m, "Họ và tên Người giám hộ", MAX_LENGTH_FOR_HO_VA_TEN_GIAM_HO.ToString()));
                }
                if (!String.IsNullOrEmpty(input.SoDtGiamHo))
                {
                    m = ValidationHelper.ValidationForString.checkPhone(input.SoDtGiamHo);
                    if (ValidationHelper.hasError(m))
                    {
                        messeges.Add(MessagesEx.MsgById(m, "Số điện thoại người giám hộ"));
                    }
                }

                m = ValidationHelper.ValidationForString.checkRequire(input.QuanHeGiamHo);
                if (ValidationHelper.hasError(m))
                {
                    messeges.Add(MessagesEx.MsgById(m, "Quan hệ người giám hộ"));
                }
            }
            return messeges;
        }

        
        public void setDataTableToGrid(DataGridView view, string[] arrayCustomColumn, Enums.EnumForScout.ListCate ls, string unitCode, object[] arg)
        {
            //view.Rows.Clear();

            DataTable dt = base.GetAllDanhSachDoanSinh(arrayCustomColumn, ls,unitCode, arg);
            DefineColumnWithHeaderForDSDoanSinh define = new DefineColumnWithHeaderForDSDoanSinh();
            Dictionary<string, string> custom = define.setCustomColum(arrayCustomColumn);
            CustomColumn customGridView = new CustomColumn(custom);
            
            customGridView.customColumnAndDefineIt(view);

            view.DataSource = dt;
        }

        public void filterRows(DataGridView view, SearchConditionForScoutMember condition)
        {
            List<String> lstCondition = new List<string>();
            
            if(condition.maDoanSinh != string.Empty)
            {
                lstCondition.Add("MA_DOAN_SINH = '" + condition.maDoanSinh + "'");
            }

            if (condition.hoVaTen != string.Empty)
            {
                lstCondition.Add("HO_VA_TEN LIKE '%" + condition.hoVaTen + "%'");
            }

            string s = string.Empty;
            
            if (lstCondition.Count == 0)
            {
                return;
            }

            for (int i = 0; i < lstCondition.Count; i++)
            {
                s = s + lstCondition[i];

                if (i != 0)
                {
                    s = " AND " + s;
                }
            }

            (view.DataSource as DataTable).DefaultView.RowFilter = s; 

        }
    }
}
